package com.sushengren.easyword.util;

import com.sushengren.easyword.exception.IORuntimeException;

import java.io.File;
import java.io.IOException;

/**
 * 文件工具类
 *
 * @author sushengren
 */
public class FileUtil {

    /**
     * 创建临时文件<br>
     * 创建后的文件名为 prefix[Randon].suffix From com.sushengren.easyword.util.FileUtil
     *
     * @param prefix    前缀，至少3个字符
     * @param suffix    后缀，如果null则使用默认.tmp
     * @param dir       临时文件创建的所在目录
     * @param isReCreat 是否重新创建文件（删掉原来的，创建新的）
     * @return 临时文件
     * @throws IORuntimeException IO异常
     */
    @SuppressWarnings("ResultOfMethodCallIgnored")
    public static File createTempFile(String prefix, String suffix, File dir, boolean isReCreat) throws IORuntimeException {
        int exceptionsCount = 0;
        while (true) {
            try {
                File file = File.createTempFile(prefix, suffix, mkdir(dir)).getCanonicalFile();
                if (isReCreat) {
                    file.delete();
                    file.createNewFile();
                }
                return file;
            } catch (IOException e) {
                if (++exceptionsCount >= 50) {
                    throw new IORuntimeException(e);
                }
            }
        }
    }

    /**
     * 创建文件夹，会递归自动创建其不存在的父文件夹，如果存在直接返回此文件夹<br>
     * 此方法不对File对象类型做判断，如果File不存在，无法判断其类型
     *
     * @param dir 目录
     * @return 创建的目录
     */
    @SuppressWarnings("ResultOfMethodCallIgnored")
    public static File mkdir(File dir) {
        if (dir == null) {
            return null;
        }
        if (!dir.exists()) {
            dir.mkdirs();
        }
        return dir;
    }

    /**
     * 获取临时文件目录
     *
     * @return 临时文件目录
     */
    public static File getTmpDir() {
        return new File(System.getProperty("java.io.tmpdir"));
    }

}
